package task

import (
	"fmt"
	"go_web/internal/repo/repo_sys"
	"os"
	"time"

	"github.com/robfig/cron/v3"
)

func SetupFileTask(c *cron.Cron) {
	// 0 0 */2 * * ?
	// */5 * * * * *
	if _, err := c.AddFunc("0 0 */2 * * ?", DeleteTempFileTask); err != nil {
		panic(fmt.Sprintf("注册删除临时文件定时任务失败: %v", err))
	}

}

func DeleteTempFileTask() {
	defer func() {
		if r := recover(); r != nil {
			fmt.Printf("定时任务异常: %v\n", r)
		}
	}()

	fmt.Println("DeleteTempFileTask 定时任务开始...")

	twoHoursAgo := time.Now().Add(-2 * time.Hour)
	tempFileList, err := repo_sys.SysFile.Where(repo_sys.SysFile.IsTemporary).
		Where(repo_sys.SysFile.CreateTime.Lt(twoHoursAgo)).Find()
	if err != nil {
		fmt.Printf("获取临时文件列表失败: %v\n", err)
		return
	}

	for _, file := range tempFileList {
		if err := os.Remove(file.LocPos); err != nil {
			fmt.Printf("删除临时文件失败: %v\n", err)
			return
		}
		_, err := repo_sys.SysFile.Unscoped().Delete(file)
		if err != nil {
			fmt.Printf("删除临时文件记录失败: %v\n", err)
			return
		}
	}

	fmt.Println("DeleteTempFileTask 定时任务结束！")
}
